home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 24 / CU Amiga Magazine's Super CD-ROM 24 (1998)(EMAP Images)(GB)(Track 1 of 2)[!][issue 1998-07].iso / CUCD / Programming / MCC_HexEdit / Developer / C / Examples / HexEdit-Demo.c
Encoding:
C/C++ Source or Header  |  1998-05-04  |  7.3 KB  |  290 lines

  1.  
  2. #include <exec/memory.h>
  3.  
  4. #include <intuition/sghooks.h>
  5. #include <libraries/iffparse.h>
  6. #include <libraries/gadtools.h>
  7. #include <libraries/mui.h>
  8.  
  9. #include <clib/exec_protos.h>
  10. #include <clib/graphics_protos.h>
  11. #include <clib/intuition_protos.h>
  12. #include <clib/utility_protos.h>
  13. #include <clib/dos_protos.h>
  14. #include <clib/muimaster_protos.h>
  15.  
  16. #include <clib/alib_protos.h>
  17.  
  18. #ifdef __SASC
  19. #include <pragmas/exec_pragmas.h>
  20. #include <pragmas/graphics_pragmas.h>
  21. #include <pragmas/intuition_pragmas.h>
  22. #include <pragmas/utility_pragmas.h>
  23. #include <pragmas/dos_pragmas.h>
  24. #include <pragmas/muimaster_pragmas.h>
  25. #endif
  26.  
  27. #include "/HexEdit/MUI/HexEdit_mcc.h"
  28.  
  29.  
  30. /* $setver$ */
  31. static const char VersionString[] = "$VER: HexEdit-Demo 1.0 " __AMIGADATE__ "©1998 Miloslaw Smyk";
  32. #define VERSION  1
  33. #define REVISION 0
  34.  
  35. #define SAMPLE_MEM_SIZE 507
  36.  
  37. UBYTE sample_mem[SAMPLE_MEM_SIZE];
  38.  
  39.  
  40. /****************************************************************************/
  41. /* Compiler Stuff                                                           */
  42. /****************************************************************************/
  43.  
  44. #define REG(x) register __ ## x
  45. #define ASM    __asm
  46. #define SAVEDS __saveds
  47.  
  48.  
  49. /****************************************************************************/
  50. /* Global Vars                                                              */
  51. /****************************************************************************/
  52.  
  53. LONG __stack = 12288;
  54.  
  55. struct Library *MUIMasterBase;
  56. struct Library *GfxBase      ;
  57. struct Library *IntuitionBase;
  58. struct Library *UtilityBase  ;
  59.  
  60. extern struct Library *DOSBase;
  61.  
  62. struct MUI_CustomClass *CL_MainWindow ;
  63.  
  64. /****************************************************************************/
  65. /* Misc Help Functions                                                      */
  66. /****************************************************************************/
  67.  
  68. LONG xget(Object *obj,ULONG attribute)
  69. {
  70.     LONG x;
  71.     get(obj,attribute,&x);
  72.     return(x);
  73. }
  74.  
  75. ULONG __stdargs DoSuperNew(struct IClass *cl,Object *obj,ULONG tag1,...)
  76. {
  77.     return(DoSuperMethod(cl,obj,OM_NEW,&tag1,NULL));
  78. }
  79.  
  80.  
  81. /****************************************************************************/
  82. /* MainWindow class                                                         */
  83. /****************************************************************************/
  84.  
  85.  
  86. #define REGISTER_NR        31284
  87.  
  88. #define TAGBASE_THORGAL (TAG_USER | (REGISTER_NR << 16))
  89.  
  90. /*** Methods ***/
  91.  
  92. #define MW_METH TAGBASE_THORGAL + 0x1000
  93.  
  94. #define MUIM_MainWindow_Finish        MW_METH + 0x0001
  95.  
  96.  
  97. struct MainWindow_Data
  98. {
  99.     Object *HexEdit;
  100.     Object *prop;
  101. };
  102.  
  103.  
  104. ULONG MainWindow_Finish(struct IClass *cl,Object *obj,struct MUIP_MainWindow_Finish *msg)
  105. {
  106.  
  107.     DoMethod((Object *)xget(obj,MUIA_ApplicationObject),MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  108.  
  109.     return(0);
  110. }
  111.  
  112.  
  113. ULONG MainWindow_New(struct IClass *cl,Object *obj,struct opSet *msg)
  114. {
  115.     Object *HexEdit;
  116.     Object *prop;
  117.     ULONG i;
  118.  
  119.     if (obj = (Object *)DoSuperNew(cl,obj,
  120.             MUIA_Window_Title, "HexEdit-Demo Window",
  121.             MUIA_Window_ID   , MAKE_ID('M','A','I','N'),
  122.             MUIA_Window_UseRightBorderScroller, TRUE,
  123.             MUIA_Window_SizeRight, TRUE,
  124.             WindowContents, VGroup,
  125.                     Child, HGroup,
  126.                     Child, HexEdit = HexEditObject,
  127.                         VirtualFrame,
  128.                         MUIA_HexEdit_LowBound, sample_mem,
  129.                         MUIA_HexEdit_HighBound, sample_mem + SAMPLE_MEM_SIZE - 1,
  130.                         MUIA_HexEdit_BaseAddressOffset, -(LONG)sample_mem,
  131.                         MUIA_HexEdit_EditMode, TRUE,
  132.                         MUIA_HexEdit_SelectMode, MUIV_HexEdit_SelectMode_Byte,
  133. //                        MUIA_HexEdit_ColumnsPerLine, 6,
  134.                         MUIA_ShortHelp, "The example HexEdit object.",
  135.                         MUIA_CycleChain, 1,
  136.                     End,
  137.  
  138.                     Child, prop = ScrollbarObject,
  139.                         MUIA_Prop_UseWinBorder, MUIV_Prop_UseWinBorder_Right,
  140.                     End,
  141.                 End,
  142.                 End,
  143.  
  144.             TAG_MORE, msg->ops_AttrList))
  145.     {
  146.         struct MainWindow_Data *data = INST_DATA(cl,obj);
  147.  
  148.         data->HexEdit = HexEdit;
  149.         data->prop = prop;
  150.  
  151.         /* fill the mem with some example data */
  152.  
  153.         for(i = 0; i < SAMPLE_MEM_SIZE; i++)
  154.             sample_mem[i] = i;
  155.  
  156.         set(data->HexEdit, MUIA_HexEdit_PropObject, data->prop);
  157.  
  158.         DoMethod(obj      ,MUIM_Notify,MUIA_Window_CloseRequest,TRUE ,obj,2,MUIM_MainWindow_Finish,0);
  159.  
  160.         return((ULONG)obj);
  161.     }
  162.     return(0);
  163. }
  164.  
  165. SAVEDS ASM ULONG MainWindow_Dispatcher(REG(a0) struct IClass *cl,REG(a2) Object *obj,REG(a1) Msg msg)
  166. {
  167.  
  168.     switch (msg->MethodID)
  169.     {
  170.         case OM_NEW                 : return(MainWindow_New    (cl,obj,(APTR)msg));
  171.         case MUIM_MainWindow_Finish : return(MainWindow_Finish (cl,obj,(APTR)msg));
  172.     }
  173.  
  174.     return(DoSuperMethodA(cl,obj,msg));
  175. }
  176.  
  177.  
  178.  
  179. /****************************************************************************/
  180. /* Init/Exit Functions                                                      */
  181. /****************************************************************************/
  182.  
  183. VOID ExitLibs(VOID)
  184. {
  185.     if (IntuitionBase) CloseLibrary(IntuitionBase);
  186.     if (GfxBase      ) CloseLibrary(GfxBase      );
  187.     if (UtilityBase  ) CloseLibrary(UtilityBase  );
  188.     if (MUIMasterBase) CloseLibrary(MUIMasterBase);
  189. }
  190.  
  191. BOOL InitLibs(VOID)
  192. {
  193.     MUIMasterBase = OpenLibrary("muimaster.library",11);
  194.     UtilityBase   = OpenLibrary("utility.library"  ,36);
  195.     GfxBase       = OpenLibrary("graphics.library" ,36);
  196.     IntuitionBase = OpenLibrary("intuition.library",36);
  197.  
  198.     if (MUIMasterBase && UtilityBase && GfxBase && IntuitionBase)
  199.         return(TRUE);
  200.  
  201.     ExitLibs();
  202.     return(FALSE);
  203. }
  204.  
  205. VOID ExitClasses(VOID)
  206. {
  207.     if (CL_MainWindow  ) MUI_DeleteCustomClass(CL_MainWindow  );
  208. }
  209.  
  210. BOOL InitClasses(VOID)
  211. {
  212.     CL_MainWindow   = MUI_CreateCustomClass(NULL, MUIC_Window    , NULL, sizeof(struct MainWindow_Data  ), MainWindow_Dispatcher  );
  213.  
  214.     if(CL_MainWindow)
  215.         return(TRUE);
  216.  
  217.     ExitClasses();
  218.     return(FALSE);
  219. }
  220.  
  221. /****************************************************************************/
  222. /* Main Program                                                             */
  223. /****************************************************************************/
  224.  
  225. /*int main(int argc,char *argv[])*/
  226. void __stdargs __main(char *comline)
  227. {
  228.     extern struct WBStartup *_WBenchMsg;
  229.     ULONG sigs=0;
  230.     Object *app;
  231.     Object *win;
  232.     int msg;
  233.  
  234.     if (InitLibs())
  235.     {
  236.         if (InitClasses())
  237.         {
  238.             app = ApplicationObject,
  239.                 MUIA_Application_Title      , "HexEdit-Demo",
  240.                 MUIA_Application_Version    , VersionString,
  241.                 MUIA_Application_Copyright  , "©1998, Miloslaw Smyk / World Federation of Mad Hackers",
  242.                 MUIA_Application_Author     , "Miloslaw Smyk",
  243.                 MUIA_Application_Description, "An example for HexEdit class",
  244.                 MUIA_Application_Base       , "HED",
  245.                 MUIA_Application_Window     , win = NewObject(CL_MainWindow->mcc_Class,NULL,TAG_DONE),
  246.                 End;
  247.  
  248.             if (app)
  249.             {
  250.                 if (_WBenchMsg)
  251.                     msg = 0;
  252.                 else
  253.                     msg = 0; //HandleArgs(win);
  254.  
  255.                 if (!msg)
  256.                 {
  257.                     set(win,MUIA_Window_Open,TRUE);
  258.  
  259.                     while (DoMethod(app,MUIM_Application_NewInput,&sigs) != MUIV_Application_ReturnID_Quit)
  260.                     {
  261.                         if (sigs)
  262.                         {
  263.                             sigs = Wait(sigs | SIGBREAKF_CTRL_C | SIGBREAKF_CTRL_E | SIGBREAKF_CTRL_F);
  264.  
  265.                             /* quit when receiving break from console */
  266.                             if (sigs & SIGBREAKF_CTRL_C)
  267.                                 break;
  268.  
  269.                             /* deiconify & activate on ctrl-f just like the other prefs programs */
  270.                             if (sigs & SIGBREAKF_CTRL_F)
  271.                             {
  272.                                 set(app,MUIA_Application_Iconified,FALSE);
  273.                                 set(win,MUIA_Window_Open,TRUE);
  274.                             }
  275.                         }
  276.                     }
  277.  
  278.                     set(win,MUIA_Window_Open,FALSE);
  279.                 }
  280.                 MUI_DisposeObject(app);
  281.             }
  282.  
  283.             ExitClasses();
  284.         }
  285.  
  286.         ExitLibs();
  287.     }
  288.  
  289. }
  290.